package agency.tango.materialintroscreen.widgets;
import android.content.Context;
import android.support.v4.view.CustomViewPager;
import android.support.v4.view.MotionEventCompat;
import android.util.AttributeSet;
import android.view.KeyEvent;
import android.view.MotionEvent;
import agency.tango.materialintroscreen.adapter.SlidesAdapter;
public class SwipeableViewPager extends CustomViewPager {
private float startPos = 0;
private int currentIt;
private boolean swipingAllowed;
private boolean alphaExitTransitionEnabled = false;
public SwipeableViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
swipingAllowed = true;
}
@Override
public boolean onInterceptTouchEvent(final MotionEvent event) {
int action = MotionEventCompat.getActionMasked(event);
switch (action) {
case (MotionEvent.ACTION_DOWN):
return super.onInterceptTouchEvent(event);
case (MotionEvent.ACTION_MOVE):
if (!swipingAllowed) {
return false;
}
return super.onInterceptTouchEvent(event);
case (MotionEvent.ACTION_UP):
if (!swipingAllowed) {
return false;
}
return super.onInterceptTouchEvent(event);
default:
return super.onInterceptTouchEvent(event);
}
}
@Override
public boolean onTouchEvent(final MotionEvent event) {
int action = MotionEventCompat.getActionMasked(event);
switch (action) {
case (MotionEvent.ACTION_DOWN):
startPos = event.getX();
currentIt = getCurrentItem();
resolveSwipingRightAllowed();
return super.onTouchEvent(event);
case (MotionEvent.ACTION_MOVE):
if (!swipingAllowed && startPos - event.getX() > 16) {
return true;
}
return super.onTouchEvent(event);
case (MotionEvent.ACTION_UP):
if (!swipingAllowed && startPos - event.getX() > 16) {
smoothScrollTo(getWidth() * currentIt, 0);
return true;
}
startPos = 0;
return super.onTouchEvent(event);
default:
return super.onTouchEvent(event);
}
}
@Override
public SlidesAdapter getAdapter() {
return (SlidesAdapter) super.getAdapter();
}
@Override
public boolean executeKeyEvent(KeyEvent event) {
return false;
}
public void moveToNextPage()
{
setCurrentItem(getCurrentItem() + 1, true);
}
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
super.onPageScrolled(position, positionOffset, positionOffsetPixels);
}
public int getPreviousItem() {
return getCurrentItem() - 1;
}
public void setSwipingRightAllowed(boolean allowed) {
swipingAllowed = allowed;
}
public void alphaExitTransitionEnabled(boolean alphaExitTransitionEnabled) {
this.alphaExitTransitionEnabled = alphaExitTransitionEnabled;
}
public boolean alphaExitTransitionEnabled() {
return alphaExitTransitionEnabled && swipingAllowed;
}
private void resolveSwipingRightAllowed() {
if (getAdapter().shouldLockSlide(getCurrentItem())) {
setSwipingRightAllowed(false);
} else {
setSwipingRightAllowed(true);
}
}
}